// this在ts中，可以用做值，也能作为类型
// 实现一个简化版的set数据结构
class SimpleSet { 
  private elements: Map<number, boolean>;
  constructor() { 
    this.elements = new Map<number, boolean>;
  }

  add(element: number): this { 
    this.elements.set(element, true);
    return this;
  }

  has(element: number): boolean { 
    return this.elements.has(element);
  }

  delete(element: number): boolean { 
    return this.elements.delete(element);
  }

  values(): number[] { 
    return Array.from(this.elements.keys());
  }
}

class MutableSet extends SimpleSet{
  // add(element: number): MutableSet { 
  //   super.add(element);
  //   return this;
  // }
  show() {
    console.log("Mutable Show");
  }
}


const mySet = new MutableSet();
mySet.add(1).add(2).add(3).add(4).show(); // 链式调用

console.log(mySet.values());

mySet.delete(2);
console.log(mySet.values());

